定期ミートアップ 第61回
Asyncな関数だけCPS変換するようにできないか?
Cライブラリのコールバックとかのため
例:libxmlで特定のノードの処理を書くとか
全部CPS変換すると、返り値の型がRustFutureに変わってしまう
(あとは、.llが読みやすいとデバッグが捗る…かも?)
golangってこのへんどうしてるんでしょうね?
cgo というのがある
普通のgoではだめ?(exact gcだし)
Asyncな関数だけCPS変換するには
無からAsync関数が生えることはない
extern(async) sleep_sec(Int n) -> Null
こういうのを呼ぶ関数
それを呼ぶ関数
それを引数として受けとり、呼ぶ関数
関数を変数に入れて、それを別の関数に渡して〜とした場合も検知できないといけない→データフロー解析?みたいなことが必要
逆はどうか
「確実にAsyncでない」ものだけsyncにする
例:不審な関数を呼ばない
「async fun」と書かせればよいのではないか?
Penの場合
suspensionが起こるかは型でわかるので、C callback safeな関数を書けてるかどうかはユーザがわかる
or 同期的なバージョンをよぶ
詰め替え